/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cr.ac.una.sive.managed;

import com.icesoft.faces.component.ext.RowSelectorEvent;
import cr.ac.una.sive.vista.util.FacesUtils;
import cr.ac.una.sive.entidad.Marchamo;
import cr.ac.una.sive.entidad.Usuario;
import cr.ac.una.sive.entidad.Vehiculo;
import cr.ac.una.sive.entidadLocal.MarchamoLocal;
import cr.ac.una.sive.entidadLocal.UsuarioLocal;
import cr.ac.una.sive.entidad.Vehiculo;
import cr.ac.una.sive.entidadLocal.VehiculoLocal;
import cr.ac.una.sive.sessionbean.MarchamoFacadeLocal;
import cr.ac.una.sive.sessionbean.VehiculoFacadeLocal;
import cr.ac.una.sive.sessionbean.UsuarioFacadeLocal;
import java.io.IOException;
import java.math.BigInteger;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.*;
import org.icefaces.ace.event.SelectEvent;
import org.icefaces.ace.model.table.RowStateMap;

/**
 *
 * @author claribel
 */
@ManagedBean
@SessionScoped
public class MarchamoFacadeManaged {
    @EJB(mappedName = "ejb/MarchamoFacade")
    private MarchamoFacadeLocal marchamoFacade;
    
    @EJB(mappedName = "ejb/VehiculoFacade")
    private VehiculoFacadeLocal vehiculoFacade;
    
    @EJB(mappedName = "ejb/UsuarioFacade")
    private UsuarioFacadeLocal usuarioFacade;
    //hola bola
     private RowStateMap stateMap = new RowStateMap();
      
    private cr.ac.una.sive.sessionbean.MarchamoFacadeLocal marchamoFacadeLocal;

    
    EntityManagerFactory emf=Persistence.createEntityManagerFactory("una-sivePU");
    EntityManager em=emf.createEntityManager();
    
    private ArrayList<MarchamoLocal> listaMarchamos = null;
    private MarchamoLocal marchamoLocal = new MarchamoLocal();
    
    private String estado="inserta";
    private boolean exitoso = false;

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public void setExitoso(boolean exitoso) {
        this.exitoso = exitoso;
    }

    public String getEstado() {
        return estado;
    }

    public boolean isExitoso() {
        return exitoso;
    }
    

    public MarchamoLocal getMarchamoLocal() {
        return marchamoLocal;
    }

    public void setMarchamoLocal(MarchamoLocal marchamoLocal) {
        this.marchamoLocal = new MarchamoLocal();
    }
    
    public String contador(){
        return "select max(id_marchamo)from marchamo";
    }
    public RowStateMap getStateMap() { return stateMap; }
    
    public void guardar() {
        FacesContext context = FacesContext.getCurrentInstance();

        FacesMessage message = new FacesMessage();

        Marchamo marchamo = new Marchamo();
        
        /**
         * ***** POR EL MOMENTO SIEMPRE VA INSERTAR********
         */
        

        try {
            
                UsuarioFacadeManaged usuarioFacadeManaged = (UsuarioFacadeManaged) FacesUtils.getManagedBean("usuarioFacadeManaged");
                
                VehiculoFacadeManaged vehiculoFacadeManaged = (VehiculoFacadeManaged) FacesUtils.getManagedBean("vehiculoFacadeManaged");
                
                UsuarioLocal usuarioLocal = usuarioFacadeManaged.getUsuarioLocal();
                
//                vehiculoFacadeManaged.guardarVehiculo();                              
//                usuarioFacadeManaged.guardarUsuario();                
//                 usuarioLocal.setApellido1("Jhoan");
//                 usuarioLocal.setCedula(121334544);
//                 usuarioLocal.setApellido2("Jhoan");
//                 usuarioLocal.setCantidadMarchamo(2);
//                 usuarioLocal.setCentroTrabajo(1);
//                 usuarioLocal.setCorreoElectronico("jalpizacr@gmail.com");
//                 usuarioLocal.getEscuela()
                
                
//                marchamo.setIdMarchamo(marchamoLocal.getIdMarchamo());
                marchamo.setEstadoMarchamo(marchamoLocal.getEstadoMarchamo());
                marchamo.setFechaCreacion(marchamoLocal.getFechaActual());
                marchamo.setFechaVigencia(marchamoLocal.getFechaVigencia());            
                marchamo.setTipoMarchamo(marchamoLocal.getTipoMarchamo());
                marchamo.setNumeroMarchamo(marchamoLocal.getNumeroMarchamo());
                //marchamo.setUsuario(usuarioFacadeManaged.getUsuarioLocal());
                
                
                Usuario u = usuarioFacadeManaged.obtenerUsuario();
                
                //usuarioFacadeManaged.guardarUsuario();
                marchamo.setUsuario(u);
                
                //vehiculoFacadeManaged.guardarVehiculo();
                
                Vehiculo v = vehiculoFacadeManaged.obtenerVehiculo();
                marchamo.setVehiculo(v);
                
               
                
                //Usuario usuario = new Usuario();
                //usuario = usuarioFacade.find(1);
                //marchamo.setUsuario(usuario);
                
                //Vehiculo vehiculo = new Vehiculo();
                //vehiculo = vehiculoFacade.find(1);
                //marchamo.setVehiculo(vehiculo);
                
                

            if (estado.equals("inserta")) {
                
                               
                 
                marchamoFacade.create(marchamo);
                
                message.setSeverity(FacesMessage.SEVERITY_INFO);
                message.setSummary("Marchamo Insertado Correctamente");
                message.setSummary("Marchamo Insertado Correctamente");
                context.addMessage("Campos:save", message);
                 this.exitoso = true;
                listaMarchamos = null;

            } else if (estado.equals("modifica")) {
                marchamoFacade.edit(marchamo);
                message.setSeverity(FacesMessage.SEVERITY_INFO);
                message.setSummary("Marchamo Modificado Correctamente");
                message.setDetail("Marchamo Modificado Correctamente");
                context.addMessage("Campos:save", message);
                 this.exitoso = true;
                 this.estado = "inserta";
            }

        } catch (Exception e) {
            message.setSeverity(FacesMessage.SEVERITY_INFO);
            message.setSummary(e.getMessage());
            message.setDetail(e.getMessage());
            context.addMessage("menssage_campos", message);
        }


        


    }
    public void doNothing(){
    
    }
    public void limpiarSession(){
        //esto va ser un arreglo temporal
        if(this.estado.equals("inserta")){
            this.marchamoLocal = new MarchamoLocal();
            UsuarioFacadeManaged usuarioFacadeManaged = (UsuarioFacadeManaged) FacesUtils.getManagedBean("usuarioFacadeManaged");
            VehiculoFacadeManaged vehiculoFacadeManaged = (VehiculoFacadeManaged) FacesUtils.getManagedBean("vehiculoFacadeManaged");
            UsuarioLocal s = new UsuarioLocal();
            usuarioFacadeManaged.setUsuarioLocal(s);
            VehiculoLocal v = new VehiculoLocal();
            vehiculoFacadeManaged.setVehiculoLocal(v);
//            try {
//                FacesContext.getCurrentInstance().getExternalContext().redirect("listarMarchamos.xhtml");
//            } catch (IOException ex) {
//                Logger.getLogger(MarchamoFacadeManaged.class.getName()).log(Level.SEVERE, null, ex);
//            }
        }
//        try {
//            FacesContext.getCurrentInstance().getExternalContext().redirect("crearMarchamo.xhtml");
//        } catch (IOException ex) {
//            Logger.getLogger(MarchamoFacadeManaged.class.getName()).log(Level.SEVERE, null, ex);
//        }
    }
    public void columnaSeleccionada(SelectEvent  e){
            UsuarioFacadeManaged usuarioFacadeManaged = (UsuarioFacadeManaged) FacesUtils.getManagedBean("usuarioFacadeManaged");
                
            VehiculoFacadeManaged vehiculoFacadeManaged = (VehiculoFacadeManaged) FacesUtils.getManagedBean("vehiculoFacadeManaged");
         
        //if(e.){
            
            MarchamoLocal m = new MarchamoLocal();
              m=  (MarchamoLocal)e.getObject();
            marchamoLocal = m;
            //VEhiculo
            Vehiculo v = (Vehiculo)marchamoLocal.getVehiculo();           
            VehiculoLocal vehiculo = new VehiculoLocal(v);
            vehiculoFacadeManaged.setVehiculoLocal(vehiculo);
            
            //Usuario
            Usuario u = (Usuario)marchamoLocal.getUsuario();           
            UsuarioLocal usuario = new UsuarioLocal(u);
            usuarioFacadeManaged.setUsuarioLocal(usuario);
            
            this.estado = "modifica";
            try {
                //return "success";
                FacesContext.getCurrentInstance().getExternalContext().redirect("crearMarchamo.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(MarchamoFacadeManaged.class.getName()).log(Level.SEVERE, null, ex);
            }
//        }else{
//            marchamoLocal = new MarchamoLocal();
//            this.estado = "inserta";           
//        }
        
    }
     public void rowSelectors(RowSelectorEvent e){
            UsuarioFacadeManaged usuarioFacadeManaged = (UsuarioFacadeManaged) FacesUtils.getManagedBean("usuarioFacadeManaged");
                
            VehiculoFacadeManaged vehiculoFacadeManaged = (VehiculoFacadeManaged) FacesUtils.getManagedBean("vehiculoFacadeManaged");
       
        if(e.isSelected()){
            
            MarchamoLocal m = new MarchamoLocal();
              m=  (MarchamoLocal)listaMarchamos.get(e.getRow());
            marchamoLocal = m;
            //VEhiculo
            Vehiculo v = (Vehiculo)marchamoLocal.getVehiculo();           
            VehiculoLocal vehiculo = new VehiculoLocal(v);
            vehiculoFacadeManaged.setVehiculoLocal(vehiculo);
            
            //Usuario
            Usuario u = (Usuario)marchamoLocal.getUsuario();           
            UsuarioLocal usuario = new UsuarioLocal(u);
            usuarioFacadeManaged.setUsuarioLocal(usuario);
            
            this.estado = "modifica";
            try {
                //return "success";
                FacesContext.getCurrentInstance().getExternalContext().redirect("crearMarchamo.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(MarchamoFacadeManaged.class.getName()).log(Level.SEVERE, null, ex);
            }
        }else{
            marchamoLocal = new MarchamoLocal();
            this.estado = "inserta";
           // try {
                //return "fail";
               //FacesContext.getCurrentInstance().getExternalContext().redirect("crearMarchamo.xhtml");
           // } catch (IOException ex) {
               // Logger.getLogger(MarchamoFacadeManaged.class.getName()).log(Level.SEVERE, null, ex);
           // }
        }
        
    }
    
    
    
    
    
    
    /**
     * Creates a new instance of MarchamoFacadeLocal
     */
    public MarchamoFacadeManaged() {
        this.marchamoLocal = new MarchamoLocal();
    }
    
    public void setListaMarchamos(ArrayList<MarchamoLocal> listaMarchamos) { this.listaMarchamos = listaMarchamos; }
    
    public void consultaMarchamos() {
          FacesMessage message = new FacesMessage();
          FacesContext context = FacesContext.getCurrentInstance();
        try{
            
            

            TypedQuery<MarchamoLocal> query = em.createQuery("SELECT t1.ID_MARCHAMO, t1.ESTADO_MARCHAMO, t1.FECHA_CREACION, t1.FECHA_VIGENCIA, t1.TIPO_MARCHAMO, t1.USUARIO, t1.VEHICULO,t0.MARCA from Marchamo m",
//            "SELECT m.id_marchamo,v.id,u.id FROM Marchamo m "
//                    + "INNER JOIN usuario  u ON (u.id= m.usuario) "
//                    + "INNER JOIN vehiculo v ON (v.id= m.vehiculo) ",
//                    + "WHERE m.id_marchamo = '" + 100 + "' AND c.clave = '" + pass + "'",
            MarchamoLocal.class);
            List b;
            List u = query.getResultList();
           
            if(u.isEmpty())
                 b = u;
//            else 
//                return true;
//            Iterator stIterator=stList.iterator();
//                while(stIterator.hasNext()){
//                Student st=(Student)stIterator.next();
//                System.out.print("sname:"+st.getSname());
//                System.out.print(" sroll:"+st.getSroll());
//                System.out.print(" scourse:"+st.getScourse());
//                System.out.println();
//            }
        }catch(Exception e){
            message.setSeverity(FacesMessage.SEVERITY_INFO);
            message.setSummary(e.getMessage());
            message.setDetail(e.getMessage());     
            context.addMessage("Campos", message);
//            return false;
        }
    } 
    
    
    public List getListaMarchamos() { 
//       listaMarchamos = null;
        if (listaMarchamos == null) { 
            ArrayList listaMarchamos2 = new ArrayList(marchamoFacade.findAll());
            
        listaMarchamos = new ArrayList(); 
        Marchamo marchamo; 
        for (int i = 0; i < listaMarchamos2.size(); i++) { 
            marchamo = (Marchamo) listaMarchamos2.get(i); 
        listaMarchamos.add(new MarchamoLocal(marchamo)); 
        } 
        
        } //sort(); 
        return listaMarchamos;
        
    }
    public int consultaConsecutivo() {
          FacesMessage message = new FacesMessage();
          FacesContext context = FacesContext.getCurrentInstance();
        try{
            
            Query query = em.createQuery(
            "SELECT max(c.idMarchamo) FROM Marchamo c",
            int.class);
            List<Integer>   u;
            u = query.getResultList();
            if(!u.isEmpty()){                
                   return (int)u.get(0)+1;                
            }else 
                return 0;
        }catch(Exception e){
            message.setSeverity(FacesMessage.SEVERITY_INFO);
            message.setSummary(e.getMessage());
            message.setDetail(e.getMessage());     
            context.addMessage("Campos", message);
            return 3;
        }
    } 
    
}